package delphorm.web.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.mvc.SimpleFormController;

import delphorm.entite.questionnaire.Filtre;
import delphorm.entite.questionnaire.FiltreNumerique;
import delphorm.entite.questionnaire.Question;
import delphorm.entite.questionnaire.Questionnaire;
import delphorm.entite.questionnaire.Reponse;
import delphorm.entite.questionnaire.ReponseOuverte;


public class AjouterFiltreReponseOuverteNumerique extends SimpleFormController {
	//TODO verifier que la réponse est numérique
	//permet d'ajouter le filtre dans cette réponse dans doSubmitAction
	ReponseOuverte reponseOuverte;
	
	public ReponseOuverte getReponseOuverte() {
		return reponseOuverte;
	}

	public void setReponseOuverte(ReponseOuverte reponseOuverte) {
		this.reponseOuverte = reponseOuverte;
	}

	protected Object formBackingObject(HttpServletRequest request) throws Exception {
//		récupère le formulaire dans la session
		Object formulaire = request.getSession().getAttribute("formulaire");
		
		if(formulaire == null)
		{
			//charge les objets contextuels dans la session
			chargerObjetsQuestionnaire(request);
			
			if(getReponseOuverte().getFiltre() == null)
				//crée le formulaire
				formulaire = new FiltreNumerique();
			else
				//récupère le formulaire
				formulaire = reponseOuverte.getFiltre();
			
		}
		return formulaire;
	}
	
	private void chargerObjetsQuestionnaire(HttpServletRequest request)
	{
//		récupération du questionnaire dans la session
		Questionnaire questionnaire = (Questionnaire)request.getSession().getAttribute("questionnaire");
		
		//récupère l'id de la question
		String id = request.getParameter("numeroquestion");
		//TODO exception si null
		int num = Integer.parseInt(id);
		//TODO exception si erreur de convertion NumberFormatException
		Integer idQuestion = new Integer(num);
		//récupération de la question
		Question question = (Question)questionnaire.getQuestions().get(idQuestion.intValue());
		//TODO exception si pas trouvé
		//met la question dans la session
		request.getSession().setAttribute("question",question);

		//récupère l'id de la réponse
		id = request.getParameter("numeroreponse");
		//TODO exception si null
		num = Integer.parseInt(id);
		//TODO exception si erreur de convertion NumberFormatException
		Integer idReponse = new Integer(num);
		//récupération de la réponse
		Reponse reponse = (Reponse)question.getReponses().get(idReponse.intValue());
		//met la reponse dans la session
		request.getSession().setAttribute("reponse",reponse);
		//met la réponse dans la propriété
		setReponseOuverte((ReponseOuverte)reponse);
	}

	protected void onBind(HttpServletRequest request, Object formulaire) throws Exception {
		FiltreNumerique filtreNumerique = (FiltreNumerique)formulaire;
		if(filtreNumerique.getMinimum() == null)
		{
			filtreNumerique.setMinimum(new Double(Double.NEGATIVE_INFINITY));
		}
		if(filtreNumerique.getMaximum() == null)
		{
			filtreNumerique.setMaximum(new Double(Double.POSITIVE_INFINITY));
		}
	}
	
	protected void initBinder(HttpServletRequest req, ServletRequestDataBinder binder) throws Exception {
		super.initBinder(req, binder);
		binder.registerCustomEditor(Double.class,new CustomNumberEditor(Double.class,true));
	}

	protected void doSubmitAction(Object formulaire) throws Exception {
		getReponseOuverte().setFiltre((Filtre)formulaire);
	}
}
